#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "typesprimitifs.h"
#include "produit.h"
#include "liste_produit.h"
#include "test_liste_produit.h"
#include "categorie.h"


/**
 * Nombres de test réussies.
 */
ENTIER_POSITIF ok_tests_produit = 0;

/**
 * Nombre de test ayant échoué.
 */
ENTIER_POSITIF ko_tests_produit = 0;

void set_up_tests_liste_produit() {
    printf("-------- DEBUT TEST: LISTE PRODUIT --------\n");
}

void tester_liste_produit() {
    CHAINE nomfichier;
    ENTIER nbr_lignes = 0;
    ENTIER nbr_produits = 0;
    POINTEUR_LISTE_PRODUIT temp;
    POINTEUR_LISTE_PRODUIT lp = malloc(sizeof (*lp));
    lp->pproduit = NULL;
    lp->suivant = NULL;
    /*creation d'un pointeur temporaire pour parcourir la liste */
    strcpy(nomfichier, "stock.txt");
    nbr_lignes = recupdonnee(nomfichier, lp);
    temp = lp;
    printf("----- Test d'affichage des produits lus... ------\n");
    while (temp != NULL) { /* pproduit est de type POINTEUR_PRODUIT */
        printf("%s, %g, %u, %s, %u\n", temp->pproduit->nom, temp->pproduit->prix_u,
                temp->pproduit->quantite_disponible,
                donner_nom_categorie(temp->pproduit->categorie),
                temp->pproduit->ID);
        nbr_produits++;
        temp = temp->suivant;
    }
    if (nbr_produits == nbr_lignes) {
        ok_tests_produit++;
        printf("PASSED: tester_liste_produit\n");
    } else {
        ko_tests_produit++;
        printf("FAILED: tester_liste_produit\n");
    }
    /* A decommenter en cas de test sous windows, sinon cela bloquera
     * sur Hudson. Recommenter lorsque vous en avez termine.
     * getchar();
     */
}

void tear_down_tests_liste_produit() {
    printf("------ STATS TESTS LISTE PRODUITS -----\n");
    printf("Tests reussis: %d\n", ok_tests_produit);
    printf("Tests echoues : %d\n", ko_tests_produit);
    printf("--------------------------------\n");
    printf("FIN TEST: liste produits\n");
}

void tests_liste_produit() {
    set_up_tests_liste_produit();
    tester_liste_produit();
    tear_down_tests_liste_produit();
}
